// #include "detail.hpp"

// int main()
// {
//     DLOG("asdasd");
//     return 0;
// }

// #include <atomic>
// #include <iomanip>
// #include <chrono>
// #include <iostream>
// #include <sstream>
// #include <random>

// void uuid()
// {
//     std::stringstream ss;

//     std::random_device rd;
//     std::mt19937 generator(rd());
//     std::uniform_int_distribution<int> distribution(0, 255);

//     //生成8个随机数
//     for(int i = 0; i < 8; i++)
//     {
//         if(i == 4 || i == 6) ss << "-";
//         ss << std::setw(2) << std::setfill('0') << std::hex << distribution(generator);
//     }
//     ss << "-";

//     //生成一个8字节序号
//     static std::atomic<size_t> seq(1);
//     size_t cur = seq.fetch_add(1);
//     for(int i = 7; i >= 0; i--)
//     {
//         if(i == 5) ss << "-";
//         ss << std::setw(2) << std::setfill('0') << std::hex << ((cur >> (i * 8)) & 0xff);
//     }
//     std::cout << ss.str() << std::endl;
// }

// int main()
// {
//     for(int i = 0; i < 10; i++)
//     {
//         uuid();
//     }
//     return 0;
// }

// #include <iostream>

// class A
// {
// public:
//     void operator()()
//     {
//         std::cout << "hello" << std::endl;
//     }
// };

// int main()
// {
//     A()();

//     A a;
//     a();
// }

// #include "message.hpp"
// #include "net.hpp"

// int main()
// {
//     // auto rrp = myrpc::MessageFactory().create(myrpc::MType::REQ_RPC);

//     // rrp->setMethod("add");

//     auto rrp = myrpc::MessageFactory::create<myrpc::RpcRequest>();

//     rrp->setMethod("add");
//     Json::Value val;
//     val["nums1"] = 1;
//     val["nums2"] = 2;
//     rrp->setParams(val);
//     std::string s = rrp->serialize();
//     std::cout << s << std::endl;
//     return 0;
// }

#include "net.hpp"
#include <thread>

void onMessage(const myrpc::BaseConnection::ptr& conn, myrpc::BaseMessage::ptr& msg)
{
    std::string body = msg->serialize();
    std::cout << body << std::endl;
}

int main()
{
    auto client = myrpc::ClientFactory::create("127.0.0.1", 9090);
    client->setMessageCallback(onMessage);
    client->connect();

    auto rpc_req = myrpc::MessageFactory::create<myrpc::RpcRequest>();
    rpc_req->setId("11111");
    rpc_req->setMType(myrpc::MType::RSP_RPC);
    rpc_req->setMethod("Add");
    Json::Value val;
    val["nums1"] = 1;
    val["nums2"] = 2;
    rpc_req->setParams(val);
    client->send(rpc_req);

    std::this_thread::sleep_for(std::chrono::seconds(5));
    client->shutdown();
    return 0;
}